package com.example.emergencyattempt01.activity.utils;

import org.json.JSONException;

import java.io.IOException;
import java.net.HttpURLConnection;

public abstract class AbstractNetWorkUtils implements ServerMessageFactory{

    // 基本方法
     protected abstract HttpURLConnection build_connection(String service) throws IOException;
    /**
     * @param toServer 指向该服务发送的数据
     * @param connection 指该服务开辟的一个连接，写在外边，方便同时发送请求与接收响应
     * @return  服务器返回码
     * @throws JSONException
     * @throws IOException
     */
    protected abstract int sendRequest(String toServer,HttpURLConnection connection) throws JSONException,IOException;
    /**
     *
     * @param connection 指当前服务所创建的网络连接
     * @return 一个已经解码了的，可以被外部处理的，返回自服务器的字符串
     * @throws JSONException
     * @throws IOException
     */
    protected abstract String getRespond(HttpURLConnection connection)throws JSONException,IOException;


    // 既是工厂方法，也是模板方法
    @Override
    public ServerMessage create(String toServer, String service) throws IOException, JSONException {
        //创建一个网络连接
        HttpURLConnection connection=build_connection(service);
        // 调用请求方法，返回请求码
        int code=sendRequest(toServer,connection);
        // 调用获取响应方法，得到服务器发来的字符串（已解码）
        String fromServer=getRespond(connection);

        // 打包信息，返回给调用者
        ServerStringMessage message=new ServerStringMessage();
        message.setRespondCode(code);
        message.setFromServer(fromServer);
        return message;
    }

}
